iT邦幫忙

2026 iThome 鐵人賽

DAY 10
0
Software Development

Unity進階——做一個完整的遊戲系列 第 10

Day 10:讓玩家角色在村莊中移動

  • 分享至 

  • xImage
  •  

前一天我已經完成了玩家角色 Prefab,包含角色 Sprite、Player_Idle_Down 動畫、Player_Walk_Down 動畫,以及 PlayerAnimator.controller。不過 Day 9 的 Player 還只是放在場景中的角色物件,不能真正操作。

因此 Day 10 的目標,是讓玩家角色可以在 VillageScene 中移動。這一天先不做攻擊、任務、場景切換或完整動畫方向切換,而是先完成最基本的 2D 俯視角移動控制。
由於專案已經有 Unity 的新版 Input System,因此這次使用 Keyboard.current 讀取鍵盤輸入,讓玩家可以透過 WASD 或方向鍵移動。移動方式則使用 Rigidbody2D.MovePosition,讓角色移動可以和 Unity 的 2D 物理系統配合。

https://ithelp.ithome.com.tw/upload/images/20260908/20178373iFlNX48nqf.png

我建立了第一支玩家控制腳本 PlayerMovement.cs,並放在
Assets/Game/Player/Scripts/PlayerMovement.cs

具體程式碼可以參考我上一次鐵人賽的腳本,這裡不過多贅述,之後的移動腳本都不會說明
這個腳本目前只負責三件事:讀取玩家輸入、移動 Rigidbody2D,以及在移動與停止時切換動畫。當玩家按下 WASD 或方向鍵時,角色會移動並播放 Player_Walk_Down;停止移動時,角色會回到 Player_Idle_Down。

目前動畫只先使用向下方向的 Idle 和 Walk,因此不論玩家往哪個方向移動,暫時都會播放向下走路動畫。這是 Day 10 的第一版移動測試,後面再補上下左右方向的動畫切換。

將 PlayerMovement 掛到 Player 之後,也需要確認 Player 上有 Rigidbody2D。因為這是俯視角 RPG,角色不需要受到重力影響,所以我將 Gravity Scale 設為 0。同時也勾選 Freeze Rotation Z,避免角色因為碰撞或物理計算而旋轉。

完成後,我進入 Play 模式測試移動。測試結果是玩家已經可以在村莊中用 WASD 和方向鍵移動,代表 Day 10 的主要功能已經成功。

不過測試時也發現了一個問題:玩家可以直接走到房子上面,而且因為角色的顯示順序比較高,看起來就像人在房頂上走。這不是移動腳本錯誤,而是因為目前還沒有設定碰撞範圍和阻擋物件。Unity 很貼心地讓角色穿牆,彷彿主角一出生就會靈體化,當然這不是我們要的效果。
因此我接著補上最基本的碰撞設定。

https://ithelp.ithome.com.tw/upload/images/20260908/20178373B5CZ8vXeEH.png
https://ithelp.ithome.com.tw/upload/images/20260908/20178373W6EkYOKOzo.png

我先在 Player 上加入 BoxCollider2D。這個碰撞範圍不需要包住整個 64×64 的角色圖,因為 2D RPG 通常只讓角色腳底附近作為實際碰撞區域。如果整個角色都包住,角色的頭或身體可能會很容易卡到牆壁或物件。

接著我挑選場景中的一棟房子,先加上 BoxCollider2D 作為測試。這一步沒有替整張村莊地圖設定完整碰撞,因為那會是後面 Day 12 的工作。Day 10 只先確認玩家與房屋之間可以產生基本阻擋,不會直接穿過建築。
測試後,玩家已經可以移動,也會被至少一棟房屋阻擋。這代表第一版移動與碰撞測試成功。

完成測試後,我也確認 Player.prefab 是否有保存 Day 10 新增的元件。最後確認 Prefab 中已經包含 Rigidbody2D、PlayerMovement 和 BoxCollider2D,代表未來如果把 Player 放到其他場景,也可以保留移動與碰撞設定。

https://ithelp.ithome.com.tw/upload/images/20260908/20178373cdbL1bbSwa.png

這一天也再次確認了後續世界結構的方向:目前的 TutorialScene 是森林遺跡與教學區,它不是單純的出生點,而是一個有三個出口的區域。除了通往主村莊的出口之外,之後還會有另外兩個出口,分別通往森林、野外、洞窟或支線場景。

不過 Day 10 先不處理場景切換,因為目前最重要的是先讓 Player 本身可以穩定移動。只有角色能移動之後,後面才有意義去做教學區、村莊和其他場景之間的探索流程。

透過 Day 10 的製作,玩家角色已經從靜態 Prefab 變成可以操作的角色。現在玩家可以在 VillageScene 中移動,也具備基本的 2D 物理與碰撞元件。雖然目前動畫方向還不完整,碰撞也只先測試了部分建築,但這已經是可玩流程的重要一步。

下一步 Day 11 可以開始處理攝影機跟隨玩家,讓玩家移動時畫面能跟著角色前進。Day 12 則可以再整理整張村莊地圖的碰撞區域,避免玩家穿過房屋、柵欄或其他不可通行的物件。


上一篇
Day 9:建立玩家角色 Prefab 與基礎動畫
下一篇
Day 11:讓攝影機跟隨玩家移動
系列文
Unity進階——做一個完整的遊戲12
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言